package top.infopub.job.cap.dao;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import top.infopub.generic.GenericDao;
import top.infopub.job.cap.domain.FinReimAmtDomain;
import top.infopub.job.cap.domain.LoanFinAmtDomain;
import top.infopub.job.cap.domain.ToDoPayIntDomain;
import top.infopub.model.cap.PayInterest;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/** 融资付息(CAP_PAY_INTEREST) **/
@Repository
public interface PayInterestDao extends GenericDao<PayInterest, String> {
    /**
     * 根据项目编码和金融机构ID查询最大付息截止日期
     * @param proCode
     * @param finOrgId
     * @return
     */
    Date queryMaxEndDate(@Param("proCode") String proCode, @Param("finOrgId") String finOrgId);

    /**
     * 查询待处理的借款数据，发送付息待办信息
     * @param startDate
     * @param endDate
     * @return
     */
    List<ToDoPayIntDomain> queryToDoPayInt(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 历史放款总金额
     * @param proCode
     * @param finOrgId
     * @return
     */
    BigDecimal hisLoanFinSumAmt(@Param("proCode") String proCode,
                                @Param("finOrgId") String finOrgId,
                                @Param("startDate") Date startDate);

    /**
     * 历史还款总金额
     * @param proCode
     * @param finOrgId
     * @return
     */
    BigDecimal hisFinReimSumAmt(@Param("proCode") String proCode,
                                @Param("finOrgId") String finOrgId,
                                @Param("startDate") Date startDate);

    /**
     * 当前周期内有还款记录
     * @param proCode
     * @param finOrgId
     * @param startDate
     * @param endDate
     * @return
     */
    List<FinReimAmtDomain> queryFinReimList(@Param("proCode") String proCode,
                                            @Param("finOrgId") String finOrgId,
                                            @Param("startDate") Date startDate,
                                            @Param("endDate") Date endDate);

    /**
     * 当前周期内有放款记录
     * @param proCode
     * @param finOrgId
     * @param startDate
     * @param endDate
     * @return
     */
    List<LoanFinAmtDomain> queryLoanFinList(@Param("proCode") String proCode,
                                            @Param("finOrgId") String finOrgId,
                                            @Param("startDate") Date startDate,
                                            @Param("endDate") Date endDate);
}